package com.kila.mapper;

import com.kila.entity.Address;
import com.kila.entity.Grade;
import com.kila.entity.Student;
import com.kila.entity.StudentClass;

import java.util.List;
import java.util.Map;

//操作Mybatis的接口
public interface StudentMapper {
    /**
     *     1、方法名和mapper.xml 文件的id值相同
     *     2、方法的输入参数 和 mapper.xml 文件中标签的parameterType类型一致
     *     3、方法的返回值和mapper.xml返回值一致
     */


    //查询单个学生
    Student queryStudentByStuno(int stuno);

    //查询全部学生
     List<Student> queryAllStudents();

    //增加学生
    int addStudent(Student stu);

    //删除学生
     int deleteStudentBystuno(int stuno);

    //修改学生
     int updateStudentByno(Student stu);

     //使用转换根据学生学号查找学生
    Student queryStudnetByStunoWithConverter(int stuno);

    //使用转换器增加学生
    void addStudentWithConverter(Student student);


    //通过地址查找学生（使用学生对象查找）
    List<Student> queryStudentByAddress(Student student);

    //通过地址查找学生（使用地址对象查找）
    List<Student> queryStudentByAddressWithAddress(Address address);

    //通过地址查找学生（使用Map对象查询）
    List<Student> queryStudentByAddressWithMap(Map map);

    //通过调用存储过程的方法，通过班级查询班级人数
    void queryCountStuByGraWithPro(Map<String, Object> map);

    //通过调用存储过程的方法，根据学号删除学生
    void deletestuBynum(Map<String, Object> map);

    //通过HashMap赋值和输出HashMap
    List<Map<String,Student>> getsStudentByNoWithHashMap(Map<String, Object> map);

    //通过SQL标签进行查询拼接
    List<Student> queryStuByNaOrAgeWishSQLTag(Student s);

     //通过SQL标签的WHERE标签进行查询
    List<Student> queryStuByNaOrAgeWishWhereTag(Student s);

    //通过SQL标签的foreach的使用对对象的属性迭代
    List<Student> queryStudentWithNosInGrade(Grade grade);

    //通过SQL标签的foreach的数组进行迭代
    List<Student> queryStudentWithNosInArray(int[] arr);

    //通过SQL标签的foreach的集合进行迭代
  //  List<Student> queryStudentWithNosInList(List<Integer> list);

    //通过SQL标签的froeach对对象数组内的对象属性方法进行迭代
    List<Student> queryStudentWithNosInObject(Object[] arr);

    //通过SQL标签查询一对一查询
//    List<Student> queryStuByidviewstuandcard(int i);

    //通过SQL标签一对一查询 resultMap配置
    Student queryStuByidviewstuandcard(int i);

    //通过SQL标签一对多查询 result配置
    StudentClass queryByClassViewStudent(int i);

    //通过一对多查询 使用延迟加载查询
    List<Student> querystuByall();


}
